home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE23 / STARTUP / StubExe32U.pas < prev    next >
Pascal/Delphi Source File  |  1997-04-06  |  3KB  |  119 lines

  1. unit StubExe32U;
  2.  
  3. {$ifdef Ver90} //Delphi 2.0x
  4.   {$define Delphi2}
  5. {$endif}
  6. {$ifdef Ver93} //C++ Builder 1.0x
  7.   {$define Delphi2}
  8. {$endif}
  9.  
  10. interface
  11.  
  12. uses
  13.   SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  14.   StdCtrls;
  15.  
  16. type
  17.   TForm1 = class(TForm)
  18.     LoadLibBtn: TButton;
  19.     ThreadBtn: TButton;
  20.     FreeLibBtn: TButton;
  21.     procedure LoadLibBtnClick(Sender: TObject);
  22.     procedure ThreadBtnClick(Sender: TObject);
  23.     procedure FreeLibBtnClick(Sender: TObject);
  24.   private
  25.     { Private declarations }
  26.   public
  27.     { Public declarations }
  28.     DllLib: THandle;
  29.   end;
  30.  
  31. var
  32.   Form1: TForm1;
  33.  
  34. implementation
  35.  
  36. {$R *.DFM}
  37.  
  38. procedure TForm1.LoadLibBtnClick(Sender: TObject);
  39. begin
  40.   WriteLn('APP: "Load Library" button pressed');
  41.   DllLib := LoadLibrary('stubdll32.dll');
  42.   if DllLib <> 0 then
  43.   begin
  44.     LoadLibBtn.Enabled := False;
  45.     FreeLibBtn.Enabled := True;
  46.   end
  47.   else
  48.     raise EFOpenError.Create('StubDll32.Dll not found');
  49. end;
  50.  
  51. function ThreadProc(Param: Pointer): Integer;
  52. begin
  53.   WriteLn('APP: Thread started');
  54.   Result := 0;
  55.   WriteLn('APP: Thread stopping');
  56. end;
  57.  
  58. procedure TForm1.ThreadBtnClick(Sender: TObject);
  59. var
  60.   A: DWord;
  61. begin
  62.   WriteLn('APP: "Create Thread" button pressed');
  63.   BeginThread(nil, 0, ThreadProc, nil, 0, A);
  64. end;
  65.  
  66. procedure TForm1.FreeLibBtnClick(Sender: TObject);
  67. begin
  68.   WriteLn('APP: "Free Library" button pressed');
  69.   if DllLib <> 0 then
  70.   begin
  71.     FreeLibrary(DllLib);
  72.     LoadLibBtn.Enabled := True;
  73.     FreeLibBtn.Enabled := False;
  74.   end;
  75. end;
  76.  
  77. var
  78.   OldInitProc, OldExitProc: Pointer;
  79.  
  80. procedure NewInitProc;
  81. begin
  82.   if OldInitProc <> nil then
  83.     TProcedure(OldInitProc);
  84.   WriteLn('APP: Entry procedure added via InitProc');
  85. end;
  86.  
  87. procedure NewExitProc;
  88. begin
  89.   ExitProc := OldExitProc;
  90.   WriteLn('APP: Exit procedure added the old fashioned way (ExitProc)');
  91. end;
  92.  
  93. procedure NewerExitProc;
  94. begin
  95.   WriteLn('APP: Exit procedure added with AddExitProc');
  96. end;
  97.  
  98. {$ifndef Delphi2}
  99. function NewTerminateProc: Boolean;
  100. begin
  101.   Result := True;
  102.   WriteLn('APP: Terminate function added with AddTerminateProc');
  103. end;
  104. {$endif}
  105.  
  106. initialization
  107.   WriteLn('APP: Unit initialisation section');
  108.   OldInitProc := InitProc;
  109.   InitProc := @NewInitProc;
  110.   OldExitProc := ExitProc;
  111.   ExitProc := @NewExitProc;
  112.   AddExitProc(NewerExitProc);
  113. {$ifndef Delphi2}
  114.   AddTerminateProc(NewTerminateProc)
  115. {$endif}
  116. finalization
  117.   WriteLn('APP: Unit finalisation section');
  118. end.
  119.